package ar.uba.fi.algo3.algoflight.model.aviones;

import java.util.ArrayList;
import java.util.List;

import ar.uba.fi.algo3.algoflight.exceptions.NoHayPistasCompatiblesException;
import ar.uba.fi.algo3.algoflight.model.Posicion;
import ar.uba.fi.algo3.algoflight.model.formas.Rectangulo;
import ar.uba.fi.algo3.algoflight.model.interfaces.Aterrizable;
import ar.uba.fi.algo3.algoflight.model.juego.Escenario;
import ar.uba.fi.algo3.algoflight.model.pistas.Pista;
import ar.uba.fi.algo3.algoflight.model.trayectorias.TrayectoriaHaciaObjetivo;
import ar.uba.fi.algo3.algoflight.model.utils.Constantes;

/**
 * Avion Computarizado: es un avion con inteligencia para aterrizar sin
 * intervencion del usuario. En este caso el usuario simplemente debe abrirle el
 * camino para que no choque con nadie. No puede aterrizar en helipuertos.
 **/

public class AvionComputarizado extends Avion {

	public AvionComputarizado(Posicion posicionInicial, Escenario escenario)
			throws NoHayPistasCompatiblesException {
		super(posicionInicial, escenario);
		this.forma = new Rectangulo(Constantes.ANCHO_AVION_COMPUTARIZADO,
				Constantes.ALTO_AVION_COMPUTARIZADO);

		Pista pistaCompatible = escenario.getPistaCompatible(this);
		List<Posicion> coordenadasDeAterrizaje = new ArrayList<Posicion>();
		coordenadasDeAterrizaje.add(posicionInicial);
		coordenadasDeAterrizaje.add(pistaCompatible
				.getCoordenadasDeAterrizaje().get(0));
		this.cambiarTrayectoria(new TrayectoriaHaciaObjetivo(
				coordenadasDeAterrizaje));
		setVelocidad(Constantes.VEL_AVION_COMPUTARIZADO);
	}

	@Override
	public boolean puedeAterrizarEn(Aterrizable pista) {
		return pista.puedeAterrizar(this);
	}

}
